package question11;

import java.util.HashMap;

/**
 * @FileName Test
 * @Description
 * @Author Sword
 * @date 2024-12-04
 **/
public class Test {
    public static void main(String[] args) {
        //编程实现给定一个整数数组 nums 和一个整数目标值 target,在该数组中找出和为目标值 target 的两个整数,并返回它们的数组下标。
        //可假设每种输入只对应一种答案，但数组中的相同元素在答案中不能重复出现。
        //可以使用工具类中的数据结构，输入与输出的示例可参考下表。
        int[] nums = {2, 7, 11, 15};
        int target = 9;
        int[] result = twoSum(nums, target);

        System.out.println("索引: [" + result[0] + ", " + result[1] + "]");
    }


    public static int[] twoSum(int[] nums, int target) {
        // 创建一个哈希表来存储数组元素及其对应的索引
        HashMap<Integer, Integer> numToIndex = new HashMap<>();

        for (int i = 0; i < nums.length; i++) {
            // 计算需要的补数
            int complement = target - nums[i];

            // 检查补数是否在哈希表中
            if (numToIndex.containsKey(complement)) {
                return new int[]{numToIndex.get(complement), i};
            }

            // 将当前元素及其索引存入哈希表
            numToIndex.put(nums[i], i);
        }

        // 如果没有找到，返回空数组
        return new int[]{};
    }
}
